package com.welike.shibo.utils;

import org.springframework.http.*;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

/**
 * http发送请求工具类
 * @author fangyu
 * @version v1.0.0
 * @since 2019-09-10 12:01
 */
public class HttpClient {

    /**
     * 发送POST请求
     * @param url 目标URL
     * @param params 请求参数
     * @return String
     */
    public static String sendPostRequest(String url, MultiValueMap<String, String> params){
        RestTemplate client = new RestTemplate();
        // 新建Http请求头, add方法可以添加参数
        HttpHeaders headers = new HttpHeaders();
        // 设置请求发送方式
        HttpMethod method = HttpMethod.POST;
        // 以表单的方式提交
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        // 将请求头部和参数合成一个请求
        HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(params, headers);
        // 执行HTTP请求, 将返回的结构使用String类格式化(可设置为对应返回格式的类)
        ResponseEntity<String> response = client.exchange(url, method, entity, String.class);
        return response.getBody();
    }

    /**
     * 发送GET请求
     * @param url 目标URL
     * @param params 请求参数
     * @param headers http请求头, 可在外部设置好参数后传入
     * @return String
     */
    public static String sendGetRequest(String url, MultiValueMap<String, String> params, HttpHeaders headers){
        RestTemplate client = new RestTemplate();

        // 设置请求发送方式
        HttpMethod method = HttpMethod.GET;
        // 以表单的方式提交
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        // 将请求头部和参数合成一个请求
        HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(params, headers);
        // 执行HTTP请求, 将返回的结构使用String类格式化
        ResponseEntity<String> response = client.exchange(url, method, entity, String.class);
        return response.getBody();
    }
}
